import GCJ_CLASS_TYPE = require('./../../common/GCJ_CLASS_TYPE');
import DEFINE = require('./../../common/DEFINE');
import Serializer = require('./../base/Serializer');
import CommonModel = require('./../../common/model/CommonModel');

var CONFIG=require('../../../../common/config');
export  = SJGReplaceItemBase;

/**
 *
 * @author 
 *
 */
/**
 
 SJGReplaceItemBase的派生关系
 
                        
 SJGReplaceItemBase［不直接使用］
       |
       |---SJGReplaceItemChart［叶节点］
       |         
       |---SJGReplaceItemImage［叶节点］                              
       |
       |---SJGReplaceItemText［叶节点，标题／副标题／备注使用］
       |        |
       |        |---SJGReplaceItemTitleText［叶节点，抬头／正文使用］
       |
       |---SJGSubGroupText［中间组］
       |        (包含属性：SJGReplaceItemTitleText的数组类型)
       |
       |---SJGSubGroupImageTextOld［中间组，待废弃］
       |        (包含属性：SJGReplaceItemImage类型和SJGReplaceItemText类型)
       |
       |---SJGSubGroupImageText［中间组，图文组使用］
       |        (包含属性：SJGReplaceItemImage类型和SJGSubGroupText类型)
       |
       |---SJGReplaceItemTable［叶节点］
 
 */ 
                                        
class SJGReplaceItemBase extends Serializer{
    // 10表示标题/11表示副标题/12表示备注；
    // 20表示文字
    // 30表示图片
    // 40折线图／41柱状图／42饼状图
    // 50表示普通表格
    // 60表示［旧版本］图文中间组［待废弃］
    // 70表示正文／小标题
    // 80表示新型文字中间组
    // 90表示新型图文中间组
    public static TYPE_PAGE_TITLE           =10;
    public static TYPE_PAGE_SUBTITLE        =11;
    public static TYPE_PAGE_COMMENT         =12;
    public static TYPE_TEXT        =20;
    public static TYPE_IMAGE       =30;
    public static TYPE_LINE_CHART  =40;
    public static TYPE_BAR_CHART   =41;
    public static TYPE_PIE_CHART   =42;
    public static TYPE_TABLE       =50;
    public static TYPE_TABLE_ROW   =51;
    public static TYPE_TABLE_CELL  =52;
    public static TYPE_SUBGROUP_IMAGETEXT_OLD      = 60;
    public static TYPE_TITLE_TEXT                  = 70;
    public static TYPE_SUBGROUP_TEXT               = 80;
    public static TYPE_SUBGROUP_IMAGETEXT          = 90;
    public static TYPE_GROUP                       = 100;
    public static TYPE_GRAPH                       = 110;
    
    public type:number = SJGReplaceItemBase.TYPE_TEXT; // 对象的类型
    public id:number = DEFINE.ID_NONE; // 对象的id

    
    public constructor(g?) {
        super(g);

        this.ct = GCJ_CLASS_TYPE.CLASS_TYPE_SJGReplaceItemBase;
    }
	
    // 从json对象(注意不是json字符串)中解析
    public fromJson(jsonObj,versionId) {
        super.fromJson(jsonObj,versionId);

        this.type = jsonObj.type * 1;
        this.id = jsonObj.id * 1;
    }
    
    // 转成json字符串
    public toJson(): string {
        // 去掉父json字符串的头尾
        var superJson = super.toJson();
        superJson = superJson.substr(1,superJson.length - 2);

        var ret = '{';
        ret += superJson;
        
        // type
        ret += ',';
        ret += '"type":';
        ret += this.type;
        // max
        ret += ',';
        ret += '"id":';
        ret += this.id;

        ret += '}';
        return ret;
    }
    
    // 转换成CommonModel树
    public toCommonModel(level: number): CommonModel {
        return CommonModel.from(this.id,this.getObjetName(),CommonModel.SPREAD_NONE,level);
    }
    // 获取对象名称
    public getObjetName(): string {
        return "可替换对象基类";
    }
    // 参数：updateOnce［可选］，true表示只发生一次替换
    public updateReplaceItemId(oldId,newId,updateOnce?: Boolean): Boolean {
        if(this.id==oldId){
            // 检测是否只进行一次替换
            var PACKER: any=this;
            if(updateOnce&&PACKER.updated) {
                return false;
            }
            PACKER.updated=true;
            // 进行更新
            this.id=newId;
            return true;
        }
        return false;
    }

	
    //SJG_MARK_APPEND--------------------
    public isContentEmpty():boolean {
        return false;
    }

}//SJG_MARK_END-------------------------
